home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 701-725 / 708 / intuisup / intuisup42.lha / Intuisup / source.lha / Editor / window.c < prev   
C/C++ Source or Header  |  1992-03-21  |  16KB  |  450 lines

  1. /* $Revision Header *** Header built automatically - do not edit! ***********
  2.  *
  3.  *    (C) Copyright 1991 by Torsten Jürgeleit
  4.  *
  5.  *    Name .....: window.c
  6.  *    Created ..: Sunday 22-Dec-91 21:23:20
  7.  *    Revision .: 0
  8.  *
  9.  *    Date        Author                 Comment
  10.  *    =========   ====================   ====================
  11.  *    22-Dec-91   Torsten Jürgeleit      Created this file!
  12.  *
  13.  ****************************************************************************
  14.  *
  15.  *    Change project window
  16.  *
  17.  * $Revision Header ********************************************************/
  18.  
  19.     /* Includes */
  20.  
  21. #include "includes.h"
  22. #include "defines.h"
  23. #include "imports.h"
  24. #include "protos.h"
  25.  
  26.     /* Defines for window */
  27.  
  28. #define WINDOW_TITLE_LEFT_EDGE    0
  29. #define WINDOW_TITLE_TOP_EDGE    5
  30. #define WINDOW_TITLE_TYPE    TEXT_DATA_TYPE_TEXT
  31. #define WINDOW_TITLE_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_BOLD)
  32. #define WINDOW_TITLE_TEXT    "Change project window"
  33. #define WINDOW_TITLE_TEXT_ATTR    &topaz80_attr
  34.  
  35.     /* Defines for window gadgets */
  36.  
  37. #define WINDOW_GADGET_OK        0
  38. #define WINDOW_GADGET_CANCEL        1
  39. #define WINDOW_GADGET_LEFT_EDGE        2
  40. #define WINDOW_GADGET_TOP_EDGE        3
  41. #define WINDOW_GADGET_WIDTH        4
  42. #define WINDOW_GADGET_HEIGHT        5
  43. #define WINDOW_GADGET_RESIZING        6
  44. #define WINDOW_GADGET_BACK_FILL        7
  45. #define WINDOW_GADGET_RENDER_COLORS    8
  46. #define WINDOW_GADGET_AVAIL_FONTS    9
  47.  
  48. #define WINDOW_GADGET1_TYPE        GADGET_DATA_TYPE_BUTTON
  49. #define WINDOW_GADGET1_FLAGS        GADGET_DATA_FLAG_HOTKEY
  50. #define WINDOW_GADGET1_TEXT        "_Ok"
  51. #define WINDOW_GADGET1_LEFT_EDGE    ((EDITOR_WINDOW_WIDTH / 2 - WINDOW_GADGET1_WIDTH) / 2)
  52. #define WINDOW_GADGET1_TOP_EDGE        (EDITOR_WINDOW_HEIGHT - WINDOW_GADGET1_HEIGHT - 5)
  53. #define WINDOW_GADGET1_WIDTH        ((6 + 2) * 8)
  54. #define WINDOW_GADGET1_HEIGHT        15
  55. #define WINDOW_GADGET1_TEXT_ATTR    &topaz80_attr
  56.  
  57. #define WINDOW_GADGET2_TYPE        GADGET_DATA_TYPE_BUTTON
  58. #define WINDOW_GADGET2_FLAGS        GADGET_DATA_FLAG_HOTKEY
  59. #define WINDOW_GADGET2_TEXT        "_Cancel"
  60. #define WINDOW_GADGET2_LEFT_EDGE    (EDITOR_WINDOW_WIDTH / 2 + (EDITOR_WINDOW_WIDTH / 2 - WINDOW_GADGET1_WIDTH) / 2)
  61. #define WINDOW_GADGET2_TOP_EDGE        (EDITOR_WINDOW_HEIGHT - WINDOW_GADGET1_HEIGHT - 5)
  62. #define WINDOW_GADGET2_WIDTH        WINDOW_GADGET1_WIDTH
  63. #define WINDOW_GADGET2_HEIGHT        WINDOW_GADGET1_HEIGHT
  64. #define WINDOW_GADGET2_TEXT_ATTR    &topaz80_attr
  65.  
  66. #define WINDOW_GADGET3_TYPE        GADGET_DATA_TYPE_INTEGER
  67. #define WINDOW_GADGET3_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE)
  68. #define WINDOW_GADGET3_LEFT_EDGE    (90 + (9 + 1) * 8)
  69. #define WINDOW_GADGET3_TOP_EDGE        21
  70. #define WINDOW_GADGET3_WIDTH        52
  71. #define WINDOW_GADGET3_HEIGHT        12
  72. #define WINDOW_GADGET3_TEXT        "_Left edge"
  73. #define WINDOW_GADGET3_TEXT_ATTR    &topaz80_attr
  74. #define WINDOW_GADGET3_INPUT_LEN    5
  75. #define WINDOW_GADGET3_INPUT_ACTIVATE    ((ULONG)WINDOW_GADGET_TOP_EDGE << 16 | WINDOW_GADGET_HEIGHT)
  76. #define WINDOW_GADGET3_INPUT_DEFAULT    NULL
  77.  
  78. #define WINDOW_GADGET4_TYPE        GADGET_DATA_TYPE_INTEGER
  79. #define WINDOW_GADGET4_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE)
  80. #define WINDOW_GADGET4_LEFT_EDGE    WINDOW_GADGET3_LEFT_EDGE
  81. #define WINDOW_GADGET4_TOP_EDGE        (WINDOW_GADGET3_TOP_EDGE + WINDOW_GADGET3_HEIGHT + 4)
  82. #define WINDOW_GADGET4_WIDTH        WINDOW_GADGET3_WIDTH
  83. #define WINDOW_GADGET4_HEIGHT        WINDOW_GADGET3_HEIGHT
  84. #define WINDOW_GADGET4_TEXT        "_Top edge"
  85. #define WINDOW_GADGET4_TEXT_ATTR    &topaz80_attr
  86. #define WINDOW_GADGET4_INPUT_LEN    5
  87. #define WINDOW_GADGET4_INPUT_ACTIVATE    ((ULONG)WINDOW_GADGET_WIDTH << 16 | WINDOW_GADGET_LEFT_EDGE)
  88. #define WINDOW_GADGET4_INPUT_DEFAULT    NULL
  89.  
  90. #define WINDOW_GADGET5_TYPE        GADGET_DATA_TYPE_INTEGER
  91. #define WINDOW_GADGET5_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE)
  92. #define WINDOW_GADGET5_LEFT_EDGE    WINDOW_GADGET3_LEFT_EDGE
  93. #define WINDOW_GADGET5_TOP_EDGE        (WINDOW_GADGET4_TOP_EDGE + WINDOW_GADGET3_HEIGHT + 4)
  94. #define WINDOW_GADGET5_WIDTH        WINDOW_GADGET3_WIDTH
  95. #define WINDOW_GADGET5_HEIGHT        WINDOW_GADGET3_HEIGHT
  96. #define WINDOW_GADGET5_TEXT        "_Width"
  97. #define WINDOW_GADGET5_TEXT_ATTR    &topaz80_attr
  98. #define WINDOW_GADGET5_INPUT_LEN    5
  99. #define WINDOW_GADGET5_INPUT_ACTIVATE    ((ULONG)WINDOW_GADGET_HEIGHT << 16 | WINDOW_GADGET_TOP_EDGE)
  100. #define WINDOW_GADGET5_INPUT_DEFAULT    NULL
  101.  
  102. #define WINDOW_GADGET6_TYPE        GADGET_DATA_TYPE_INTEGER
  103. #define WINDOW_GADGET6_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE)
  104. #define WINDOW_GADGET6_LEFT_EDGE    WINDOW_GADGET3_LEFT_EDGE
  105. #define WINDOW_GADGET6_TOP_EDGE        (WINDOW_GADGET5_TOP_EDGE + WINDOW_GADGET3_HEIGHT + 4)
  106. #define WINDOW_GADGET6_WIDTH        WINDOW_GADGET3_WIDTH
  107. #define WINDOW_GADGET6_HEIGHT        WINDOW_GADGET3_HEIGHT
  108. #define WINDOW_GADGET6_TEXT        "_Height"
  109. #define WINDOW_GADGET6_TEXT_ATTR    &topaz80_attr
  110. #define WINDOW_GADGET6_INPUT_LEN    5
  111. #define WINDOW_GADGET6_INPUT_ACTIVATE    ((ULONG)WINDOW_GADGET_LEFT_EDGE << 16 | WINDOW_GADGET_WIDTH)
  112. #define WINDOW_GADGET6_INPUT_DEFAULT    NULL
  113.  
  114. #define WINDOW_GADGET7_TYPE        GADGET_DATA_TYPE_CHECK
  115. #define WINDOW_GADGET7_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  116. #define WINDOW_GADGET7_TEXT        "_Resizing gadget"
  117. #define WINDOW_GADGET7_LEFT_EDGE    (WINDOW_GADGET3_LEFT_EDGE + WINDOW_GADGET3_WIDTH + 60)
  118. #define WINDOW_GADGET7_TOP_EDGE        (WINDOW_GADGET3_TOP_EDGE + 1)
  119. #define WINDOW_GADGET7_WIDTH        0
  120. #define WINDOW_GADGET7_HEIGHT        0
  121. #define WINDOW_GADGET7_TEXT_ATTR    &topaz80_attr
  122.  
  123. #define WINDOW_GADGET8_TYPE        GADGET_DATA_TYPE_CHECK
  124. #define WINDOW_GADGET8_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  125. #define WINDOW_GADGET8_TEXT        "_Fill background"
  126. #define WINDOW_GADGET8_LEFT_EDGE    WINDOW_GADGET7_LEFT_EDGE
  127. #define WINDOW_GADGET8_TOP_EDGE        (WINDOW_GADGET7_TOP_EDGE + 17)
  128. #define WINDOW_GADGET8_WIDTH        0
  129. #define WINDOW_GADGET8_HEIGHT        0
  130. #define WINDOW_GADGET8_TEXT_ATTR    &topaz80_attr
  131.  
  132. #define WINDOW_GADGET9_TYPE        GADGET_DATA_TYPE_CHECK
  133. #define WINDOW_GADGET9_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  134. #define WINDOW_GADGET9_TEXT        "_Use render colors"
  135. #define WINDOW_GADGET9_LEFT_EDGE    WINDOW_GADGET7_LEFT_EDGE
  136. #define WINDOW_GADGET9_TOP_EDGE        (WINDOW_GADGET8_TOP_EDGE + 17)
  137. #define WINDOW_GADGET9_WIDTH        0
  138. #define WINDOW_GADGET9_HEIGHT        0
  139. #define WINDOW_GADGET9_TEXT_ATTR    &topaz80_attr
  140.  
  141. #define WINDOW_GADGET10_TYPE        GADGET_DATA_TYPE_CHECK
  142. #define WINDOW_GADGET10_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  143. #define WINDOW_GADGET10_TEXT        "_Avail fonts"
  144. #define WINDOW_GADGET10_LEFT_EDGE    WINDOW_GADGET7_LEFT_EDGE
  145. #define WINDOW_GADGET10_TOP_EDGE    (WINDOW_GADGET9_TOP_EDGE + 17)
  146. #define WINDOW_GADGET10_WIDTH        0
  147. #define WINDOW_GADGET10_HEIGHT        0
  148. #define WINDOW_GADGET10_TEXT_ATTR    &topaz80_attr
  149.  
  150.     /* Statics for window requester */
  151.  
  152. STATIC struct GadgetData  window_gadget_data[] = {
  153.    {
  154.     WINDOW_GADGET1_TYPE,        /* gd_Type */
  155.     WINDOW_GADGET1_FLAGS,        /* gd_Flags */
  156.     WINDOW_GADGET1_LEFT_EDGE,    /* gd_LeftEdge */
  157.     WINDOW_GADGET1_TOP_EDGE,    /* gd_TopEdge */
  158.     WINDOW_GADGET1_WIDTH,        /* gd_Width */
  159.     WINDOW_GADGET1_HEIGHT,        /* gd_Height */
  160.     WINDOW_GADGET1_TEXT,        /* *gd_Text */
  161.     WINDOW_GADGET1_TEXT_ATTR,    /* *gd_TextAttr */
  162.     { 0, 0, 0 }
  163.    }, {
  164.     WINDOW_GADGET2_TYPE,        /* gd_Type */
  165.     WINDOW_GADGET2_FLAGS,        /* gd_Flags */
  166.     WINDOW_GADGET2_LEFT_EDGE,    /* gd_LeftEdge */
  167.     WINDOW_GADGET2_TOP_EDGE,    /* gd_TopEdge */
  168.     WINDOW_GADGET2_WIDTH,        /* gd_Width */
  169.     WINDOW_GADGET2_HEIGHT,        /* gd_Height */
  170.     WINDOW_GADGET2_TEXT,        /* *gd_Text */
  171.     WINDOW_GADGET2_TEXT_ATTR,    /* *gd_TextAttr */
  172.     { 0, 0, 0 }
  173.    }, {
  174.     WINDOW_GADGET3_TYPE,        /* gd_Type */
  175.     WINDOW_GADGET3_FLAGS,        /* gd_Flags */
  176.     WINDOW_GADGET3_LEFT_EDGE,    /* gd_LeftEdge */
  177.     WINDOW_GADGET3_TOP_EDGE,    /* gd_TopEdge */
  178.     WINDOW_GADGET3_WIDTH,        /* gd_Width */
  179.     WINDOW_GADGET3_HEIGHT,        /* gd_Height */
  180.     WINDOW_GADGET3_TEXT,        /* *gd_Text */
  181.     WINDOW_GADGET3_TEXT_ATTR,    /* *gd_TextAttr */
  182.     {
  183.     WINDOW_GADGET3_INPUT_LEN,    /* gd_InputLen */
  184.     WINDOW_GADGET3_INPUT_ACTIVATE,    /* gd_InputActivate */
  185.     WINDOW_GADGET3_INPUT_DEFAULT    /* gd_InputDefault */
  186.     }
  187.    }, {
  188.     WINDOW_GADGET4_TYPE,        /* gd_Type */
  189.     WINDOW_GADGET4_FLAGS,        /* gd_Flags */
  190.     WINDOW_GADGET4_LEFT_EDGE,    /* gd_LeftEdge */
  191.     WINDOW_GADGET4_TOP_EDGE,    /* gd_TopEdge */
  192.     WINDOW_GADGET4_WIDTH,        /* gd_Width */
  193.     WINDOW_GADGET4_HEIGHT,        /* gd_Height */
  194.     WINDOW_GADGET4_TEXT,        /* *gd_Text */
  195.     WINDOW_GADGET4_TEXT_ATTR,    /* *gd_TextAttr */
  196.     {
  197.     WINDOW_GADGET4_INPUT_LEN,    /* gd_InputLen */
  198.     WINDOW_GADGET4_INPUT_ACTIVATE,    /* gd_InputActivate */
  199.     WINDOW_GADGET4_INPUT_DEFAULT    /* gd_InputDefault */
  200.     }
  201.    }, {
  202.     WINDOW_GADGET5_TYPE,        /* gd_Type */
  203.     WINDOW_GADGET5_FLAGS,        /* gd_Flags */
  204.     WINDOW_GADGET5_LEFT_EDGE,    /* gd_LeftEdge */
  205.     WINDOW_GADGET5_TOP_EDGE,    /* gd_TopEdge */
  206.     WINDOW_GADGET5_WIDTH,        /* gd_Width */
  207.     WINDOW_GADGET5_HEIGHT,        /* gd_Height */
  208.     WINDOW_GADGET5_TEXT,        /* *gd_Text */
  209.     WINDOW_GADGET5_TEXT_ATTR,    /* *gd_TextAttr */
  210.     {
  211.     WINDOW_GADGET5_INPUT_LEN,    /* gd_InputLen */
  212.     WINDOW_GADGET5_INPUT_ACTIVATE,    /* gd_InputActivate */
  213.     WINDOW_GADGET5_INPUT_DEFAULT    /* gd_InputDefault */
  214.     }
  215.    }, {
  216.     WINDOW_GADGET6_TYPE,        /* gd_Type */
  217.     WINDOW_GADGET6_FLAGS,        /* gd_Flags */
  218.     WINDOW_GADGET6_LEFT_EDGE,    /* gd_LeftEdge */
  219.     WINDOW_GADGET6_TOP_EDGE,    /* gd_TopEdge */
  220.     WINDOW_GADGET6_WIDTH,        /* gd_Width */
  221.     WINDOW_GADGET6_HEIGHT,        /* gd_Height */
  222.     WINDOW_GADGET6_TEXT,        /* *gd_Text */
  223.     WINDOW_GADGET6_TEXT_ATTR,    /* *gd_TextAttr */
  224.     {
  225.     WINDOW_GADGET6_INPUT_LEN,    /* gd_InputLen */
  226.     WINDOW_GADGET6_INPUT_ACTIVATE,    /* gd_InputActivate */
  227.     WINDOW_GADGET6_INPUT_DEFAULT    /* gd_InputDefault */
  228.     }
  229.    }, {
  230.     WINDOW_GADGET7_TYPE,        /* gd_Type */
  231.     WINDOW_GADGET7_FLAGS,        /* gd_Flags */
  232.     WINDOW_GADGET7_LEFT_EDGE,    /* gd_LeftEdge */
  233.     WINDOW_GADGET7_TOP_EDGE,    /* gd_TopEdge */
  234.     WINDOW_GADGET7_WIDTH,        /* gd_Width */
  235.     WINDOW_GADGET7_HEIGHT,        /* gd_Height */
  236.     WINDOW_GADGET7_TEXT,        /* *gd_Text */
  237.     WINDOW_GADGET7_TEXT_ATTR,    /* *gd_TextAttr */
  238.     { 0, 0, 0 }
  239.    }, {
  240.     WINDOW_GADGET8_TYPE,        /* gd_Type */
  241.     WINDOW_GADGET8_FLAGS,        /* gd_Flags */
  242.     WINDOW_GADGET8_LEFT_EDGE,    /* gd_LeftEdge */
  243.     WINDOW_GADGET8_TOP_EDGE,    /* gd_TopEdge */
  244.     WINDOW_GADGET8_WIDTH,        /* gd_Width */
  245.     WINDOW_GADGET8_HEIGHT,        /* gd_Height */
  246.     WINDOW_GADGET8_TEXT,        /* *gd_Text */
  247.     WINDOW_GADGET8_TEXT_ATTR,    /* *gd_TextAttr */
  248.     { 0, 0, 0 }
  249.    }, {
  250.     WINDOW_GADGET9_TYPE,        /* gd_Type */
  251.     WINDOW_GADGET9_FLAGS,        /* gd_Flags */
  252.     WINDOW_GADGET9_LEFT_EDGE,    /* gd_LeftEdge */
  253.     WINDOW_GADGET9_TOP_EDGE,    /* gd_TopEdge */
  254.     WINDOW_GADGET9_WIDTH,        /* gd_Width */
  255.     WINDOW_GADGET9_HEIGHT,        /* gd_Height */
  256.     WINDOW_GADGET9_TEXT,        /* *gd_Text */
  257.     WINDOW_GADGET9_TEXT_ATTR,    /* *gd_TextAttr */
  258.     { 0, 0, 0 }
  259.    }, {
  260.     WINDOW_GADGET10_TYPE,        /* gd_Type */
  261.     WINDOW_GADGET10_FLAGS,        /* gd_Flags */
  262.     WINDOW_GADGET10_LEFT_EDGE,    /* gd_LeftEdge */
  263.     WINDOW_GADGET10_TOP_EDGE,    /* gd_TopEdge */
  264.     WINDOW_GADGET10_WIDTH,        /* gd_Width */
  265.     WINDOW_GADGET10_HEIGHT,        /* gd_Height */
  266.     WINDOW_GADGET10_TEXT,        /* *gd_Text */
  267.     WINDOW_GADGET10_TEXT_ATTR,    /* *gd_TextAttr */
  268.     { 0, 0, 0 }
  269.    }, {
  270.     INTUISUP_DATA_END        /* mark end of gadget data */
  271.    }
  272. };
  273.     /* Change settings for project window */
  274.  
  275.    SHORT
  276. change_project_window(VOID)
  277. {
  278.    struct GadgetData  *gd = &window_gadget_data[0];
  279.    APTR   gl;
  280.    USHORT flags = template_list.tl_Flags;
  281.    SHORT  status;
  282.  
  283.    /* Init gadgets with current project window dimension */
  284.    (gd + WINDOW_GADGET_LEFT_EDGE)->gd_SpecialData.gd_InputData.gd_InputDefault      = (BYTE *)pwin->LeftEdge;
  285.    (gd + WINDOW_GADGET_TOP_EDGE)->gd_SpecialData.gd_InputData.gd_InputDefault       = (BYTE *)pwin->TopEdge;
  286.    (gd + WINDOW_GADGET_WIDTH)->gd_SpecialData.gd_InputData.gd_InputDefault          = (BYTE *)pwin->Width;
  287.    (gd + WINDOW_GADGET_HEIGHT)->gd_SpecialData.gd_InputData.gd_InputDefault         = (BYTE *)pwin->Height;
  288.    (gd + WINDOW_GADGET_RESIZING)->gd_SpecialData.gd_CheckData.gd_CheckSelected      = (flags & TEMPLATE_LIST_FLAG_RESIZING ? 1 : 0);
  289.    (gd + WINDOW_GADGET_BACK_FILL)->gd_SpecialData.gd_CheckData.gd_CheckSelected     = (flags & TEMPLATE_LIST_FLAG_BACK_FILL ? 1 : 0);
  290.    (gd + WINDOW_GADGET_RENDER_COLORS)->gd_SpecialData.gd_CheckData.gd_CheckSelected = (flags & TEMPLATE_LIST_FLAG_RENDER_COLORS ? 1 : 0);
  291.    (gd + WINDOW_GADGET_AVAIL_FONTS)->gd_SpecialData.gd_CheckData.gd_CheckSelected   = (flags & TEMPLATE_LIST_FLAG_AVAIL_FONTS ? 1 : 0);
  292.  
  293.    /* Print title and display gadgets */
  294.    IClearWindow(eri, ewin, 0, 0, EDITOR_WINDOW_WIDTH, EDITOR_WINDOW_HEIGHT,
  295.                                      0);
  296.    IPrintText(eri, ewin, WINDOW_TITLE_TEXT, WINDOW_TITLE_LEFT_EDGE,
  297.            WINDOW_TITLE_TOP_EDGE, WINDOW_TITLE_TYPE, WINDOW_TITLE_FLAGS,
  298.                             WINDOW_TITLE_TEXT_ATTR);
  299.    if (!(gl = ICreateGadgets(eri, &window_gadget_data[0], 0, 0, NULL))) {
  300.       status = EDITOR_ERROR_OUT_OF_MEM;
  301.    } else {
  302.       IDisplayGadgets(ewin, gl);
  303.       status = change_project_window_action(gl);
  304.       IRemoveGadgets(gl);
  305.       IFreeGadgets(gl);
  306.    }
  307.    return(status);
  308. }
  309.     /* Perform action for change project window settings */
  310.  
  311.    STATIC SHORT
  312. change_project_window_action(APTR gl)
  313. {
  314.    struct TemplateList  *tl = &template_list;
  315.    struct NewWindow     *nwin = &project_new_window;
  316.    struct MsgPort       *up = ewin->UserPort;
  317.    USHORT left_edge = pwin->LeftEdge, top_edge = pwin->TopEdge,
  318.       width = pwin->Width, height = pwin->Height,
  319.       max_width = wb_screen.Width, max_height = wb_screen.Height,
  320.       flags = tl->tl_Flags;
  321.    BOOL   keepon = TRUE;
  322.    SHORT  status = EDITOR_STATUS_NORMAL;
  323.  
  324.    do {
  325.       struct IntuiMessage  *msg;
  326.  
  327.       WaitPort(up);
  328.       while (msg = IGetMsg(up)) {
  329.      ULONG value;
  330.  
  331.      switch (msg->Class) {
  332.         case CLOSEWINDOW :
  333.            status = EDITOR_STATUS_QUIT;
  334.            keepon = FALSE;
  335.            break;
  336.  
  337.         case ISUP_ID :
  338.            value = (ULONG)msg->IAddress;
  339.            switch (msg->Code) {
  340.           case WINDOW_GADGET_OK :
  341.  
  342.              /* Change project window */
  343.              nwin->LeftEdge = left_edge;
  344.              nwin->TopEdge  = top_edge;
  345.              nwin->Width    = width;
  346.              nwin->Height   = height;
  347.              tl->tl_Flags   = flags;
  348.              if ((status = new_project_window(tl, flags)) ==
  349.                              EDITOR_STATUS_NORMAL) {
  350.             refresh_all_templates();
  351.              }
  352.              keepon = FALSE;
  353.              break;
  354.  
  355.           case WINDOW_GADGET_CANCEL :
  356.              keepon = FALSE;
  357.              break;
  358.  
  359.           case WINDOW_GADGET_LEFT_EDGE :
  360.              if ((value + width) > max_width) {
  361.             DisplayBeep(NULL);
  362.             ISetGadgetAttributes(gl, WINDOW_GADGET_LEFT_EDGE,
  363.                    0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  364.                              (BYTE *)left_edge);
  365.              } else {
  366.             left_edge = value;
  367.             flags    |= TEMPLATE_LIST_FLAG_CHANGED;
  368.              }
  369.              break;
  370.  
  371.           case WINDOW_GADGET_TOP_EDGE :
  372.              if ((value + height) > max_height) {
  373.             DisplayBeep(NULL);
  374.             ISetGadgetAttributes(gl, WINDOW_GADGET_TOP_EDGE,
  375.                    0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  376.                               (BYTE *)top_edge);
  377.              } else {
  378.             top_edge = value;
  379.             flags   |= TEMPLATE_LIST_FLAG_CHANGED;
  380.              }
  381.              break;
  382.  
  383.           case WINDOW_GADGET_WIDTH :
  384.              if ((left_edge + value) > max_width) {
  385.             DisplayBeep(NULL);
  386.             ISetGadgetAttributes(gl, WINDOW_GADGET_WIDTH,
  387.                    0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  388.                                  (BYTE *)width);
  389.              } else {
  390.             width  = value;
  391.             flags |= TEMPLATE_LIST_FLAG_CHANGED;
  392.              }
  393.              break;
  394.  
  395.           case WINDOW_GADGET_HEIGHT :
  396.              if ((top_edge + value) > max_height) {
  397.             DisplayBeep(NULL);
  398.             ISetGadgetAttributes(gl, WINDOW_GADGET_HEIGHT,
  399.                    0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  400.                                 (BYTE *)height);
  401.              } else {
  402.             height = value;
  403.             flags |= TEMPLATE_LIST_FLAG_CHANGED;
  404.              }
  405.              break;
  406.  
  407.           case WINDOW_GADGET_RESIZING :
  408.              if (value) {
  409.             flags |= TEMPLATE_LIST_FLAG_RESIZING;
  410.              } else {
  411.             flags &= ~TEMPLATE_LIST_FLAG_RESIZING;
  412.              }
  413.              flags |= TEMPLATE_LIST_FLAG_CHANGED;
  414.              break;
  415.  
  416.           case WINDOW_GADGET_BACK_FILL :
  417.              if (value) {
  418.             flags |= TEMPLATE_LIST_FLAG_BACK_FILL;
  419.              } else {
  420.             flags &= ~TEMPLATE_LIST_FLAG_BACK_FILL;
  421.              }
  422.              flags |= TEMPLATE_LIST_FLAG_CHANGED;
  423.              break;
  424.  
  425.           case WINDOW_GADGET_RENDER_COLORS :
  426.              if (value) {
  427.             flags |= TEMPLATE_LIST_FLAG_RENDER_COLORS;
  428.              } else {
  429.             flags &= ~TEMPLATE_LIST_FLAG_RENDER_COLORS;
  430.              }
  431.              flags |= TEMPLATE_LIST_FLAG_CHANGED;
  432.              break;
  433.  
  434.           case WINDOW_GADGET_AVAIL_FONTS :
  435.              if (value) {
  436.             flags |= TEMPLATE_LIST_FLAG_AVAIL_FONTS;
  437.              } else {
  438.             flags &= ~TEMPLATE_LIST_FLAG_AVAIL_FONTS;
  439.              }
  440.              flags |= TEMPLATE_LIST_FLAG_CHANGED;
  441.              break;
  442.            }
  443.            break;
  444.      }
  445.      IReplyMsg(msg);
  446.       }
  447.    } while (keepon == TRUE);
  448.    return(status);
  449. }
  450.